#include "msq.h"

int main(void)
{
	struct msgbuf msg;

	/*获取key*/
	key_t key = ftok(".", 'q');	

	/*创建/打开信号量集*/
	int semid = semget(key, 1, IPC_CREAT|0666);//信号量集只有1个信号量
	if(semid < 0)
	{
		perror("semget");
		return 1;
	}

	/*创建/打开消息队列*/
	int msqid = msgget(key, IPC_CREAT|0666);
	if(msqid < 0)
	{
		perror("msgget");
		return 1;
	}

	/*接收消息*/
	msg.mtype = SENDTYPE_A;
	msg.pid = getpid();
	
	while(1)
	{
		bzero(msg.mtext, size);
		sem_p(semid, 0);//P操作
		msgrcv(msqid, &msg, sizeof(msg), RECVTYPE_ALL, 0);//不阻塞IPC_NOWAIT
		sem_v(semid, 0);//V操作
		if(msg.mtext[0] != '\0')//如果不为空说明发送方发送了消息
			printf("[pid:%d type:0x%lx]send a message:\n",msg.pid,msg.mtype);
		printf("%s",msg.mtext);
		
		if(strncmp(msg.mtext,"quit",4) == 0)	break;
	}

	return 0;
}

